perm filename STRUCT.DOC[SYS,HE] blob
sn#084269 filedate 1974-01-28 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00023 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 DISPLAY ROUTINES
C00006 00003 SAVE/RESTORE MECHANISM
C00007 00004 MAPPING DATA STRUCTURE
C00011 00005 LINE STATUS BITS IN LEDG1
C00013 00006 LINE GRADING BITS
C00015 00007 SCORING FUNCTION
C00017 00008 PROTOTYPE DATA STRUCTURES - variables,lines and body structure
C00021 00009 PROTOTYPES CONT. - feature structure
C00024 00010 PROTOTYPES CONT. - more feature structure
C00027 00011 EDGE DATA STRUCTURE
C00031 00012 LINE DATA STRUCTURE
C00035 00013 VERTEX DATA STRUCTURE
C00039 00014 SCENE FEATURE DATA STRUCTURES
C00041 00015 XREF TABLES
C00042 00016 MAPTRC WORD
C00045 00017 LFDIF AND MODIF FORMATS
C00047 00018 PARSER ARRAYS
C00050 00019 MORE PARSER ARRAYS
C00053 00020 MORE PARSER ARRAYS
C00055 00021 VARIABLES - PROCEDURE PARSE
C00058 00022 VARIABLES - PROCEDURE MAPREC
C00061 00023 VARIABLES - MAPREC - Central loop
C00065 ENDMK
C⊗;
DISPLAY ROUTINES
Only active portions of data structure are displayed.
All POGs are stored in one buffer, in order. The first word
for each POG is size/brightness word if POG is active and to be displayed;
it is a jump to the start of the next POG if inactive or already displayed.
DADR[I] is the index into the buffer for the start of the Ith POG.
DBRSI[I] is the size/brightness word for POG to store when POG becomes
active
DICH[I] is true if POG must be regenerated I=0 refers to all POGs
DION[I] is true if POG is being displayed.e displayed.
DISP[I] is true if POG is to be displayed.
DISFUS is index of first word of user generated display in buffer
DISLAS is number of user generated words in buffer
DFORCE true forces necessary updating (overrides NODIS and DHOLD)
DHOLD true suppresses display updating (user controlled)
NODIS true suppresses display updating (program controlled). Used
during data structure expansion.
POG WHAT WHERE
1 frame 4 to 13
2 edge pairs 14 to y←55+NOEPL+NOEPL%10
3 edge marks y+1 to j←y+210
4 lines j+1 to k←j+MAXNOV+5
5 line marks k+1 to l←k+MAXNOV+5
6 vertices l+1 to m←l+2*MAXNOV+5
7 m+1 end of used portion of buffer (DADR only)
Edge pairs are displayed as points if IAEDG≠2, else as line segments.
Vertices are displayed for line ends if CVLIN
DRX, DRY is center of display rectangle
IRX, IRY is center of internal coordinate rectangle
DSCX, DSCY are scale factors for display coordinates
ISCX, ISCY are inverse of DSCX, DSCY
If windowing (WIND true) edge points and strings are displayed if
-510≤x≤510 and (-510 max LOCT+5)≤y≤510, where LOCT is top of page printer.
Lines are displayed if ?????.
SAVE/RESTORE MECHANISM
file extensions set to .TEM during initialization and whenever
the data structure for the extension is altered. Automatic
saves are skipped when extension is not .TEM.
Automatic restores delete file if extension is .TEM.
If extension is .TEM, automatic saves use files
EDSAVE.TEM for edges
LISAVE.TEM for lines
PRSAVE.TEM for prototypes
For edge data input extensions are:
.DAT Hueckel format
.EDG Pingle format
.SED sorted file (transform and RDEP only entered)
.TEM temporary save file
MAPPING DATA STRUCTURE
Each mapping found is stored in a list structure containing
variable length blocks, stored consecutively. Each block contains a
three word header followed by line numbers, stored three to a word.
The first group of lines are those used in the mapping. Immediately
following these are a list of the scene lines replaced, which are
needed for the rejection routine. The header word is as follows:
WORD 1
first third number of words in this block
second third number of used lines following header
third third number of replaced lines following used lines
WORD 2
first third prototype number
second third score
third third FLAGS:
1 deleted
2 complete mapping
4 to be deleted
WORD 3
entire word mapping key
Each mapping is stored as it is found. Pointer CMPIND points
to current mapping. BSTBYT is a byte pointer to the score of the best
mapping so far. When mappings are exhausted, or a complete mapping is
found, the best mapping is put in the permenant structure and deleted
here, by flagging it. Then, all other mappings which have used or
replaced lines which are in the best mapping, or which are part of
verticies in the best mapping are also deleted. Mappings where the
most complete mapping was no good and the one saved was created
during backup are always deleted, since the more complete mapping may
have been connected to the best one.
When the data space is exhausted, it is garbage collected,
moving the blocks which have not been deleted to the bottom of the
space. If more space is needed, the two mappings with the lowest
scores are deleted. This is done until the routine which called the
garbage collector has enough space for its next block. If the mapper
runs out of lines, the two mappings with the lowest scores and which
contain inserted lines are deleted.
After a mapping is removed, the remainder are searched for
the best, the keys of all active mappings are stored so they will not
be tried again, and the mapper is called.
LINE STATUS BITS IN LEDG1
Array LEDG1 contains status bits for the lines, indexed by ID
BIT MNEUMONIC DESCRIPTION COMMENTS
bit=1 bit=0
... ....... .............. ..................... ..............
1 MAPPED line mapped line unmapped rest of bits
valid only if
this is 1
2 INSERT line inserted line in scene
4 LINE full line ray
10 COLLIN collinear new insertion if B2=1 only
with scene line
20 UNIT unit ray if B4=0 only
100 FUSE fused ray if B4=0 only
200 ONEND only 1 end has (if both ONEND and
basis in scene TWOND are zero,
400 TWOND both ends have neither end has
basis in scene basis in scene)
1000 CUT line cut off or
linked to unused
line through
vertex of ≤2 lines
2000 VERT fusion passed
through vertex of
>3 rays
LINE GRADING BITS
The line grading routine fills array EVA with the bits giving
the evaluation of the line, indexed by ID, for the scoring routine.
The bits are:
BIT MEANING CAN OCCUR FOR
SCENE INSERTED
LINE RAY LINE RAY
....... ................. .... .... .... ....
1 mapped yes yes yes yes
2 L.F. tested yes no yes no
4 not L.F. tested yes yes yes yes
10 on boundary yes yes yes yes
20 not on boundary yes yes yes yes
100 line yes no yes no
200 ray no yes no yes
1000 unit ray no no no yes
2000 fused ray no no no yes
10,000 in scene yes yes no no
20,000 inserted and collinear
to a scene line no no yes yes
40,000 inserted and not col. no no yes yes
100,000 cut no no yes yes
200,000 not cut yes yes yes yes
1,000,000 vertex passage no no yes yes
2,000,000 not vertex passage no no yes yes
10,000,000 0-ended no no yes yes
20,000,000 1-ended no yes yes yes
40,000,000 2-ended yes no yes no
SCORING FUNCTION
The number of lines meeting each criteria are multiplied by
the coefficient given (or 1) and summed to get a score.
sufficiency test:
mapped ∧ in scene ∧ two ended ≥2
mapped ≥3
completeness test:
all lines L.F. tested
no lines cut or vertex passage
all boundary lines in scene or collinear and 2-ended
<1/3 inside lines are inserted∧¬collinear ∨ 0-ended
<1/2 inside lines are 1-ended
score:
8 * mapped ∧ ¬cut ∧ ¬vert ∧ (scene∨collinear) ∧ 2-ended
6 * mapped ∧ ¬cut ∧ ¬vert ∧ (scene∨collinear∨LF tested) ∧ 1-ended ∧ line
4 * mapped ∧ ¬cut ∧ ¬vert ∧ LF tested ∧ 0-ended
2 * mapped ∧ ¬cut ∧ ¬vert ∧ ray ∧ 1-ended ∧ (scene∨collinear)
-1* mapped ∧ ¬collinear ∧ ¬LF tested ∧ line
-2* mapped ∧ ray ∧ ¬collinear
-2* mapped ∧ 1-ended ∧ boundary
-3* mapped ∧ 0-ended ∧ boundary
-4* mapped ∧ vert
-5* mapped ∧ ray ∧ ¬collinear ∧ boundary
-6* mapped ∧ cut
PROTOTYPE DATA STRUCTURES - variables,lines and body structure
MXNPRO 5 maximum number of prototypes
MAXPLT 12*MXNPRO maximum number of prototype lines
MAXPFT 4*MAXPLT maximum number of prototype features
NPRO number of prototypes (free storage at NPRO+1)
PVERT number of vertices
PPTRL points to start of the prototype in PLINE AND PLINEF
PLTOT total number of prototype lines (free storage at
PLTOT+1)
PFTOT total number of prototype features stored (free
storage at PFTOT+1) =PLFTOT+PCFTOT
MAXPLS maximum number of lines/prototype
MAXPVS maximum number of vertices/prototype
PLFTOT total number of line features
PCFTOT total number of compound features
PFFREE feature to prototype free storage pointer
PFREE prototype c.f. pairs free storage pointer
indexed by prototype number
STRING PNAME[1:MXNPRO] prototype name
INT. PLINES[1:MXNPRO] number of lines for each prototype
INT. PVERTS[1:MXNPRO] number of vertices for each prototype
INT. PPTRL[1:MXNPRO] for each prototype, the index of the first word in
prototype line arrays which refer to this prototype
for each line of prototype. If line I is in prototype J, the index
is PPTR[J]+LEDG1[I]. Data for prototype I starts at PPTRL[I] and
extends for PLINES[I] entries.
INT. PLINE[1:MAXPLT] line data structure - cross reference
0-5 6B end vertex 1 (unique number
for each seperate vertex)
6-11 6B end vertex 2
12-17 6B ptr into these tables to next
line at end 1
18-23 6B ptr to next line at end 2
24 1B side 1 border?
25 1B side 2 border?
26-30 5B equivalence class
31-35 5B parallelity class (0 for all
lines || to no other)
INT. PLINE2[1:MAXPLT] 0-25 26B not used
26 1B on iff this line in the longer
(of 2) length classes for this
line's parallelity class.
27-35 9B l.f. ID.
INT. PLINEF[1:MAXPLT] line features. Bit 0 on iff l.f. non-directional
Also found in PFLST
PROTOTYPES CONT. - feature structure
indexed by feature I.D.
INTEGER PFLST[1:MAXPFT] is an ordered array of all different features for
all prototypes. L.Fs are stored first, followed by
C.F.s. Each type is ordered by magnitude.
line feature storage. One half word for the line
feature traversing the line in each direction.
Ordered with the smallest l.f. on the left.
0 1B 0
1-4 4B # of lines >180 degrees
5 1B any of the above ~ = 180 degrees?
6-9 4B # of lines < 180 degrees
10 1B any of the above ~ = 180 degrees?
11-12 2B outside angle (smallest angle from
line on the >180 side to the ≤180
side. Bits codes as:
0 <180
1 ≤180
2 >180
3 ≥180
13-14 2B 0 if converging on this side
1 if conv. or ||
2 if diverging on this side
3 if div. or ||
based on angle from last line at
start end for this side, to next
line at opposite end CCW ordered
as the l.f.
15-17 3B unused
compound feature storage. One half word for
each direction of the line pair. Ordered with
the smallest c.f. on the left.
0 1B 1
1-8 8B L.F. id for first line in this
direction.
9 1B direction that L.F. is traversed
going toward the junction: 0 as
ordered in L.F.; 1 otherwise.
10-13 4B position of other parent line CCW
around center vertex. 1+number of
rays in between
14-17 4B constellation of opposing end-rays
as for L.F.s
14 1 if intersect pointing out
from C.F.
15 1 if diverging on this side
16 1 if collinear
17 1 if parallel
PROTOTYPES CONT. - more feature structure
INT. PFPTR[0:MAXPFT] feature reference word
0 1B all mappings tried?
1-5 5B # of rays for this feature
6 1B ordered?
7-11 5B unused
12-23 12B points into CFEAT (c.f.s only)
start of list of instances of
this feature in scene.
24-35 12B pointer into PFPRO. Start of list
of instances of this feature in
prototypes.
INT. PFPRO[1:MAXPFT] prototype substructure.
0-11 12B prototype number
12-23 12B pointer to PFEAT - instances of
this feature in this prototype
24-35 12B pointer to next entry for this
feature in some other prototype.
0 at end of list.
INT. PFEAT[1:MAXPFT] has in each first word:
0 1B 1
1-11 11B prototype number
12-23 12B feature i.d.
24-35 12B # of items in sublist
followed by items. If c.f. :
0 1B 0
1 1B 0 if left half of LF define line
end at intersection; 1 otherwise
2-11 10B index of prototype line 1
12 1B 1
13 1B line 2 end at intersection (as bit 1)
14-23 10B index of prototype line 2
24-35 12B next pointer.
If l.f.:
0 1B 0
1-11 11B index of prototype line
12 1B 0
13-23 11B equivalance class
24-35 12B next pointer. Last pointer is 0.
EDGE DATA STRUCTURE
EDGMIN 200 minimum size of NOEPA for allocating arrays
NOEPM 50
NOEPA 0 number of edge pairs
NOEPL NOEPA+NOEPM
KICH read in length of camera transform
RDEP read in operator spacing/2 (length of edge pairs)
REAL ARRAY EAX[0:NOEPL] x coord of start of edge pair
REAL ARRAY EAY[0:NOEPL] y coord of start of edge pair
REAL ARRAY EBX[0:NOEPL] x coord of end of edge pair
REAL ARRAY EBY[0:NOEPL] y coord of end of edge pair
INTEGER ARRAY LE[0:NOEPL] edge pair connectivity. =1 if not linked,
=2 if linked to previous pair, =3 if linked to
next pair, =4 if linked to both pairs.
REAL ARRAY TFORM[1:15,1:3] camera transform
no edge pairs if EAX[0]=EAY[0]=0
LINE DATA STRUCTURE
LINMIN 50 minumum size of NOBAL for array allocation
MSAFA 30 absolute margin of safety (# of lines extra)
RMSAF .5 relative margin of safety
NOBAL NOEPA*RDEP/10 # of initial lines, estimate based on edges
MAXNOL NOBAL+NOBAL*RMSAF+MSAFA maximum number of lines
Arrays of length MAXNOL are ordered by line number and the index is the
I.D. of the line. The indices of the vertices of the line in the simple
vertex arrays are 2*I-1 and 2*I.
NOL number of lines
IFREEL pointer to first free line storage in LCREDE (none iff ifreel=0)
LDATE current level for activation-deactivation.
LNCRE1 lowest active level
LNCRE2 highest active level
REAL CXL[1:MAXNOL] line equation X*CX+Y*CY+CC=0
REAL CYL[1:MAXNOL] line equation
REAL CCL[1:MAXNOL] line equation
REAL RLEN[1:MAXNOL] line lengths
REAL ANGARG[1:MAXNOL] pos. angle ( in degrees) from pos. abscissa
INT. LEDG1[1:MAXNOL] pointer to start of edge data structure for scene
lines
INT. LEDG2[1:MAXNOL] pointer to end of edge data structure for scene
lines.
INT. LCREDE[1:MAXNOL] line creation-deletion vector. Low 12 bits are
current value. Parser uses as 3-number stack by
rotating word 12 bits at a time.
N≤-1000 means free storage. If -1000-P then P is
index of next free word. LCREDE[last]=-1000
-1000<N≤0 not currently used.
N>0 means created at level N (1 is init. fit)
and line is active (if between LNCRE1 and LNCRE2).
0<N≤1000 is the scene
1001 is scene lines used in current MAPREC
1002 is inserted lines or rays in current MAPREC
1003 is replaced lines or rays in current MAPREC
1004 is inserted lines or rays for best mapping
so far with current key (MAP)
1005 is inserted lines or rays for best total
mapping so far (PARSE)
1006 is display
1007 is unused scene lines at mapped vertices
2000+CURMAP complete objects or best partials
3000+CURMAP removed lines (replaced by insertions)
of complete objects or best partials
≥4000 is free so far (12 bits only)
VERTEX DATA STRUCTURE
MAXNOV 2*MAXNOL maximum number of composite and single verticies
MAXSCF 2*MAXNOV maximum number of compound features.
for composite vertices
NOV number of composite vertices
IFREEV pointer to first free vertex storage (none iff ifreel=0)
REAL XVCOR[1:MAXNOV] x coordinate of composite vertex. Indexed by c.v. #
REAL YVCOR[1:MAXNOV] y coordinate of vertex
INT. LVERSI[1:MAXNOV] points to one of its single vertices.
(<0 if free storage). If -1000-p then p is index
of next free word and LVERSI[last]=-1000. Indexed
like XVCOR and YVCOR.
for single vertices
The array index is the vertex number. For vertex I, the index in the arrays
of the line data structure for its line is (I+1) DIV 2.
REAL XLCOR[1:MAXNOV] x coordinates of vertices of line
REAL YLCOR[1:MAXNOV] y coordinates of vertices of line
INT. LVER[1:MAXNOV] points to next s.v. around c.v. ccw. Inactive
lines may still point to c.v.s so LCREDE must
be checked. LVER[y]=y iff free line-end
(SVANG is then =360.) N>0 iff
vertex is permanentεc.v and next linked to s.v.is
# N. N<0 iff vertex is temporaryεc.v. and next
linked to s.v. is #-N. This is true also for
inactive lines.
INT. LVERCO[1:MAXNOV] Pointers from all members of a composite vertex to
that vertex (0 for dead cv's-vertex is free).
For s.v. n, coordinates of its cv are in
XVCOR[LVERCO[n]] and YVCOR[LVERCO[n]].
REAL SVANG[1:MAXNOV] angles at vertices to next line in list.
INTEGER LINK[1:MAXNOV] points to nearest vertex of the line collinear
to the line of this vertex. 0 if none.
If there are intervening lines, the links
are negative. Links are formed on the basis of
objects.
SCENE FEATURE DATA STRUCTURES
scene feature data structure:
SCF number of c.f.s in scene
INT.CFEAT[1:MAXSCF] 0 1B L1 end at intersection
1-11 11B i.d. of line 1
12 1B L2 end at intersection
13-23 11B i.d. of line 2
24-35 12B pointer to next CFEAT entry
for this c.f.
INT. LFEAT[1:MAXNOL] line features (index by line number). 0 if no l.f. in
central table for this line. Negated if l.f. is
ordered contrary to prototype line (not if partially
similar l.f.).
0 1B 1 if partially similar l.f.
1 1B if partially similar l.f., 1 if 2nd
vertex ok, 1st
amended; 0 if vica versa.
2 1B 1 if ordered contrary to scene line
3-35 33B i.d. of l.f.
XREF TABLES
collinear lines :
RCOL[V] distance to center of gap
lines intersect outside
RAS[V] distance to intersection from vertex v
RBS[V] distance to intersection from other vertex
IPS[V] # of closest vertex of other line, negative if collinear
lines intersect inside second of them
RK[V] distance to intersection from first vertex, V
=-1 if this line wholely inside other line
RBK[V] distance from intersection to closest vertex of other line
IPK[V] closest vertex # on other line
MAPTRC WORD
This word is read in octal and consists of flag bits for parser and
mapping routines. The original value is the argument to the parse command.
The codes are read in a as string of letters (no blanks between them) and
decoded. PI means pause and input new string. It turns on the pause bit
for the bit immediately preceding it. It is illegal for those bits not
having pause bits. RESET returns -1 and NULL returns 0.
Codes not recognized are typed and a new string is requested; the input
TTY buffer is cleared before this input.
After a pause : causes continuation of the program and ←n: causes
continuation after decoding n as new MAPTRC string
BIT CODE WORD DESCRIPTION
35 NR 1 display each new ray
34 2 pause after 35
33 OV 4 display each orbited vertex
32 10 pause after 33
31 PM 20 display each partial mapping
30 40 pause after 31
29 BM 100 display best mapping for each key
28 200 pause after 29
27 BP 400 display each best partial (parse)
26 1000 pause after 27
25 TT 2000 trace output to TTY
24 4000 pause after 25
23 TD 10000 trace output to PARSnn.TRC
22 PK 20000 pause after each new key
21 TL 40000 type trace line number
20 PD 100000 plot display
19 SK 200000 display scene after best mapping for each key
18 400000 pause after 19
17 SI 1000000 display scene for each isolation
16 2000000 pause after 17
15 PR 4000000 do PRINT REGREF 11 after each isolation
If MAPTRC=-1, the previous analysis is flushed so the parse can be redone
and MAPTRC←0. DO NOT USE.
LFDIF AND MODIF FORMATS
LFDIF: NOT USED
0 1B 1 if change (meaningful only for || case) * 1st position
1 1B 1 if deletion, 0 if insertion *
2 1B 1 if ||, 0 if div/conv *
3 1B 1 if deletion, 0 if insertion . other positions
4-7 4B number of lines to be inserted/deleted .
8-11 4B start position +according to which lines .
+of the vertex the first .
12-15 4B end position +and last positions would .
+correspond to after alter-.
+ing the special line .
16-17 2B character tags
0 no lines, no change
1 lines, no change
10 change, unambiguous
11 change, ambiguous
same for other side
MODIF:
high order 2 bits:
1 if ambiguous
1 if bare before insertion
followed by two bit positions for each ray at this vertex
00 if no change
01 if insert new ray
10 if delete present ray
11 if ambiguous
PARSER ARRAYS
matching template:
PARCLA[1:PLIN] parallelity class for each line of prototype
LENCAT[1:PLIN] length class for each line of prototype
LENDV[1:PLIN,0:1] for each line of prototype, the number of the
vertex at each end
LENDP[1:PLIN,0:1] for each line of prototype, the index of the
next line CCW around each vertex
recursive structure:
MAPORD[1:PLIN] the prototype lines referenced so far, in time
order.
MPORDS[1:2*PLIN] indexed by recursive level and contains a pointer
to the currently or last referenced MAPORD entry
at each level.
MAPIS[1:2*PLIN] indexed by recursive level and contains pointers
to the last MAPORD items created at the level.
record mappings:
PLMAP[1:MAXPLS,0:1] for each prototype line end, the corresponding
scene line end (s.v.). Ends are ordered according
to feature. '7777 stored if no direction known
(token line). Cleared for each call of MAPREC.
LLEV[1:PLIN,0:1] recursive level of corresponding mapping in PLMAP
negative for a line that is backing. Cleared for
each call of MAPREC.
PLMAPO[1:PLIN,0:1] holds previous contents of PLMAP when a line is
replaceed.
LLEVO[1:PLIN,0:1] holds previous LLEV entry during line replacement
PVMAP[1:MAXPVS] for each prototype vertex, the corresponding
scene composite vertex. Cleared for each MAPREC.
VLEV[1:PVER] recursive level of corresponding mapping in PVMAP
Cleared for each MAPREC.
MORE PARSER ARRAYS
line fusion:
LFUSE[1:PLIN,0:1] a 6-level stack, for each prototype line,
containing pointers into LFUSES. Points to LFUSES
entry, if any, for this line. Cleared for each call.
LFUSES[1:63] Backup info for fusion.
0-23 SV of line extended (opposite fused end)
24-35 SV of new line corresponding to above
misc.:
LENARG[0:PLIN,0:1,0:1] Indexed by ||-class, conv. or div. and leng. class
Contains length of other lines of this type, if
any have been found. Cleared for each MAPREC.
PARARG[0:PLIN] Inited to -1 for each map. Angle of lines in this
|| class, if any have been found previously.
RRR[0:1] Internal to PARUP
RNUM[0:1] Internal to PARUP
EVA[1:PLIN] Holds score for each line of mapping being graded
INSLEV[1:PLIN] recursive level of inserted line. Negative if there
was an existing line, 0 for no line. Cleared for
each map.
LFTSTL[1:PLIN] recursive level where l.f. consistancy test true if
≠0. Cleared for each map.
to save best mappings:
PARTS[1:63,0:1+MAXPLS%3] first index is mapping number, second is scene
line numbers corresponding to prototype lines
stored 3 per word starting in word 1. -1 if no
such line.
word 0 contains:
0-5 6B prototype number
6-8 3B completion code
00 complete
01 partial - no completion
11 partial - completion attempted
10 completed partial
9-35 27B score for mapping
MORE PARSER ARRAYS
FLMAPS[1:MAXNOV] mapping keys stored, in time order during c.f. pass
0-10 11B scene line #
11-22 12B prototype #
23-34 12B prototype line #
35 1B 1 scene and prototype lines ordered
differently.
LEDG1 indexed by mapped line or ray (created only)
Cleared for each MAPREC.
RAYS:
-1 assumed from ||-class angle
0 token or scene ray
1 or 2 physical ray replacing scene ray ??
3 physical ray created by fusion of scene
rays
4 fused vertex has ≥3 lines from it.
LINES:
0 scene line or line with no vertices in scene
1 or 2 inserted line with 1 vertex in scene
3 inserted line with both vertices in scene
LEDG2 indexed by created mapped line. Cleared for each
MAPREC.
-2 line is collinear with an unused line or
line was shortened to fit more than the
allowable shrinkage.
-1 other created lines
0 scene line
VARIABLES - PROCEDURE PARSE
KMP display scene flag set by MAP procedure
FLMIND maximum used index in array FLMAPS
BESTMP index in PARTS of best mapping so far
CURMAP index in PARTS of last mapping saved
CMPIND index in PARTS of current mapping
UB upper bound of current feature search
LB lower bound of current feature search
UBI upper bound of line search when mapping LFs
FTSW 0 mapping CFs
1 mapping LFs ordered same as line
2 mapping LFs ordered opposite line
TC trace line counter
MXMXCM last feature mapped
MAXCOM feature currently being mapped
KADR index of current feature
CFP current position on linked list (in CFEAT) of instances of the
feature in the scene
ORD ≠0 if feature is ordered
SCL1 ID of line (1 for CF)
SCL2 Id of line 2 for CF
PRP current position on linked list (in PRPRO) of prototypes having
this feature
IC current CFEAT entry
PROT prototype number
AD0 index of first line of prototype
PLIN number of prototype lines
PVER number of prototype vertices
PFP current postion on sequention list (in PFEAT) of instances of
the feature in this prototype
IB current PFEAT entry.
PRL1 index of line in prototype (1 if CF)
PRL2 index of line 2 in prototype if CF
DIR CF: 1 if LF ordered contrary to ordering of line in CF
LF: 1 if LF ordered contrary to scene line
6 if LF ordered contrary to prototype line
7 if LF ordered contrary to both lines
SUCC value of MAP procedure
-1 failed
0 partial map
1 complete map
2 complete map with cut off lines
VARIABLES - PROCEDURE MAPREC
global variables:
LNCS1 save creation range at start of PARSE
LNCS2 "
RAYS number of lines>180 in current MODIF word
MDCNT number of non-zero bits (in pairs) in MODIF
DEGSW TRUE if mapping degenerate prototypes and DEGABL is TRUE
DEGABL always FALSE !!
FULREC settable flag for full recursion used in backing up levels
FTREV set by last feature creation
0 both halves of feature are equal
1 right half<left (feature has halves reversed)
2 right>left
RWIC colinearity threshold
RMALS maximum line shrinkage allowed
RELLF =.18 adjustment for length class checking.
RUL 0 if F-mapping (L.F. consistant mappings only)
1 if C-mapping (consequence mappings allowed)
BULEVS number of levels to back up
BAU TRUE if backing up (current line end is loose end of a ray-
will try to create a vertex by intersection)
CMPL -1 if object completed
0 if object not completed
1 if object completed by cutting lines in the scene
CMPLO holds last value of CMPL at termination of mapping; value from
previous mapping if CMPL was 1 at that point, causing mapping
to continue.
RLEV recursion level
MAPI maximum used entry in MAPORD. Reset from MAPIS during backup.
MPORD minimum entry of MAPORD currently being used. Reset from
MPORDS during backup.
BAUS TRUE if backing up. Set by backup routines if this state correct
at final level. Used to set BAU .
IRET value returned for MAPREC
DIR CF: 1 if LF ordered contrary to ordering of line in CF
LF: 1 if LF ordered contrary to scene line
LFDBT CF: = DIR
LF: 1 if scene line ordered contrary to prototype line
VARIABLES - MAPREC - Central loop
ID index in MAPORD of current proto base line
IB end of proto base line being orbited
NDP end of current proto line at vertex during orbiting
IA I.D. of proto base line
NEWLP I.D. of current proto line during orbiting
VPR I.D. of proto vertex being orbited (end IB of IA)
NVP I.D. of proto vertex at opposite end of current line from
orbited vertex.
NLSCM I.D. of scene line being mapped into proto base line
NEWLSC I.D. of scene line being mapped into current line during orbiting
NDSCM end of base scene line to be considered for mapping
NDSC end of current scene line at vertex being orbited.
IC I.D. of scene SV mapped into proto SV at opposite end of base line
from orbited vertex.
PLND I.D. of SV at end of scene base line being orbited
NEWSV I.D of SV at end of current line being orbited
VSC I.D. of CV at end of line being orbited.
INCOV ≠0 if trying to create a vertex by intersecting lines
INCOVS ≠0 if current vertex created by intersecting lines
VL value of PREORB procedure
0 if INCOVS on or current vertex is not a consequence of full lines
-1 if vertex a consequence of full lines
-2 if current vertex is INCOVS
1 if vertex is contradictory (line mapped elsewhere)
INS ≠0 if inserting a ray when orbiting a vertex
RAY # of rays at current vertex, when orbiting it
CH ≠0 if orbited vertex needs testing - new line mapped.
RAYCNT bareness check - # of rays of orbited vertex not counted inserted
RDIF difference between mapped and proto line lengths
RP length of proto line
RSC length of scene line
cv=VSC
p-sv=NLSCM
p-line=IA p-end=IB ↓ orbited vertex
__________________________________
m-sv=IC m-line=NLSCM m-end=NDSCM\ m-sv=NEWSV
m-sv=PLND \ p-end=NDP
BASE LINE \ m-end=NDSC
\ p-line=NEWLP
\ m-line=NEWLSC CURRENT
\ LINE
\
\ p-sv=NVP
\ m-sv=ICN
\